#include <bits/stdc++.h>
using namespace std;

double cal(pair<int, int> p1, pair<int, int> p2)
{
	int x1 = p1.first, y1 = p1.second;
	int x2 = p2.first, y2 = p2.second;
	return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}

int check(pair<int, int> p1, pair<int, int> p2, pair<int, int> p3)
{
	if((p1.first == p2.first && p2.first == p3.first) || (p1.second == p2.second && p2.second == p3.second))
		return false;
	double a = cal(p1, p2);
	double b = cal(p1, p3);
	double c = cal(p2, p3);
	// cout << "得到的长度" << a << " " << b << " " << c << endl;
	if((a == b || a == c || b == c) && (a + b > c && a + c > b && b + c > a))
		return true;
	return false;
}

int main()
{
	int n;
	cin >> n;
	int res = 0;
	vector<pair<int, int>> vec(n);
	for(int i = 0; i < n; i++)
		cin >> vec[i].first >> vec[i].second;
	for(int i = 0; i < n; i++)
	{
		for(int j = i + 1; j < n; j++)
		{
			for(int k = j + 1; k < n; k++)
			{
				if(check(vec[i], vec[j], vec[k]))
				{
					// cout << i + 1 << " " << j + 1 << " " << k + 1 << endl;
					res++;
				}
			}
		}
	}
	cout << res << endl;
	return 0;
}

//int main()
//{
//	int m, n;
//	cin >> m >> n;
//	vector<int> v1(m);
//	vector<int> v2(n);
//	for(int i = 0; i < m; i++)
//		cin >> v1[i];
//	for(int i = 0; i < n; i++)
//		cin >> v2[i];
//	int res = 0;
//	for(int i = 0, j = 0; i < m && j < n;)
//	{
//		if(v1[i] == v2[j])
//			i++, j++;
//		else
//		{
//			int count1 = 1, count2 = 1;
//			while(v1[i] != v2[j])
//			{
//				if(v1[i] < v2[j])
//				{
//					v1[i] += v1[i + count1];
//					count1++;
//					res++;
//				}
//				else
//				{
//					v2[j] += v2[j + count2];
//					count2++;
//					res++;
//				}
//			}
//			i = i + count1;
//			j = j + count2;
//		}
//	}
//	cout << res << endl;
//	return 0;
//}

//int main()
//{
//	int n = 0;
//	cin >> n;
//	vector<int> nums(n);
//	for(int i = 0; i < n; i++)
//		cin >> nums[i];
//	unordered_map<int, int> hash;
//	int res = 0;
//	for(auto e : nums)
//	{
//		if(hash[e] < 2)
//			hash[e]++;
//		else if(hash[e] == 2)
//			res++;		
//	}
//	for(auto kv : hash)
//	{
//		if(kv.second == 1)
//			res++;
//	}
//	cout << res / 2 << endl;
//	return 0;
//}

// 判断是不是素数，是返回true，否则返回false
//bool check(int num)
//{
//	if(num == 1)
//		return false;
//	for(int i = 2; i < num; i++)
//		if(num % i == 0)
//			return false;
//	return true;
//}
//
//int main()
//{
//	long long res = 0;
//	for(long long i = 1; i <= 23333333333333; i++)
//	{
//		cout << i << endl;
//		for(long long j = 1; j <= 23333333333333; j++)
//		{
//			// 如果i和j都是质数，并且这两个数的平方相乘也在这个范围内，那么就没问题
//			if(!check(i) && !check(j) && i * i * j * j >= 2333 && i * i * j * j <= 23333333333333)
//			{
//				// cout << i << "---" << j << endl;
//				res++;
//			}
//			if(i * i * j * j > 23333333333333)
//				break;
//		}
//	}
//	cout << "res: " << res << endl;
//	return 0;
//}

//int main()
//{
//	string str;
//	for(int i = 1; i <= 2023; i++)
//		str += to_string(i);
//	long long res = 0;
//	unordered_map<int, int> hash;
//	for (int i = str.size() - 1, cnt = 0; i >= 0; --i) {
//		if (str[i] == '3')
//			++cnt;
//		hash[i] = cnt;
//	}
//	for(int i = 0; i < str.size(); i++)
//	{
//		if(i % 100 == 0)
//			cout << "---" << endl;
//		if(str[i] == '2')
//		{
//			for(int j = i + 1; j < str.size(); j++)
//			{
//				if(str[j] == '0')
//				{
//					for(int p = j + 1; p < str.size(); p++)
//					{
//						if(str[p] == '2')
//						{
//							res += hash[p];
//						}
//					}
//				}
//			}
//		}
//	}
//	cout << res << endl;
//	return 0;
//}